package com.why.controller;

import com.why.cachecloud.client.redisson.util.RedisUtils;
import com.why.entity.param.StringSetParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.stream.IntStream;

/**
 * @Description 提供测试压测
 * @Author why
 * @Version 1.0.0
 * @Since 1.0
 * @Date 2022/9/1
 */
@RestController
@Slf4j
public class TestController {
    @Resource
    RedisUtils redissionUtil;

    @PostMapping("/string/set")
    public String stringSet(@RequestBody StringSetParam param) {
        IntStream.range(0, param.getLoopTimes()).forEach(i -> {
            redissionUtil.set(param.getKeyPrefix().concat(System.nanoTime() + ""), param.getValue());
        });
        return "SUCCESS";
    }

//    @GetMapping("/string/get")
//    public String stringGet(String keyPrefix) {
//        Iterator<String> iterator = redissionUtil.scan(100, keyPrefix);
//        while (iterator.hasNext()) {
//            String key = iterator.next();
//            String value = redissionUtil.get(key);
//            log.info("key:{},-->value:{}", key, value);
//        }
//        return "SUCCESS";
//    }
//
//    @PostMapping("/list/lpush")
//    public String listLPush(@RequestBody LPushParam param) {
//        String[] arr = {"lettuce", "redis", "redisson", "jedis"};
//        IntStream.range(0, param.getLoopTimes()).forEach(i -> {
//            redissionUtil.lPush(param.getKey(), trans(arr));
//        });
//        return "SUCCESS";
//    }
//
//    private String[] trans(String[] arr) {
//        Set<String> set = Arrays.asList(arr).stream().map(ele ->
//                ele.concat(String.valueOf(System.nanoTime()))
//        ).collect(Collectors.toSet());
//        return (String[]) set.toArray();
//    }
//
//
//    @GetMapping("/list/lpop")
//    public String listLPop(String key) {
//        while (true) {
//            Object o = redissionUtil.lPop(key);
//            try {
//                TimeUnit.MILLISECONDS.sleep(100);
//            } catch (InterruptedException e) {
//                log.error(e.getMessage(), e);
//            }
//            log.info("lpop from key{} receive value:{} ", key, o);
//            if (Objects.isNull(o)) {
//                return "SUCCESS";
//            }
//        }
//    }
//
//    @PostMapping("/set/sadd")
//    public String setSAdd(@RequestBody LPushParam param) {
//        String[] arr = {"lettuce", "redis", "redisson", "jedis"};
//        IntStream.range(0, param.getLoopTimes()).forEach(i -> {
//            redissionUtil.sAdd(param.getKey(), trans(arr));
//        });
//        return "SUCCESS";
//    }
//
//    @GetMapping("/set/spop")
//    public String setSpop(String key) {
//        while (true) {
//            Object o = redissionUtil.sPop(key);
//            try {
//                TimeUnit.MILLISECONDS.sleep(100);
//            } catch (InterruptedException e) {
//                log.error(e.getMessage(), e);
//            }
//            log.info("spop from key{} receive value:{} ", key, o);
//            if (Objects.isNull(o)) {
//                return "SUCCESS";
//            }
//        }
//    }
//
//    @PostMapping("/zset/sadd")
//    public String setSAdd(@RequestBody SortedSetZAddParam param) {
//        List<SortedSetEntity> list = new ArrayList<>();
//        list.add(new SortedSetEntity("lettuce", 2d));
//        list.add(new SortedSetEntity("redisson", 3d));
//        list.add(new SortedSetEntity("redis", 4d));
//        list.add(new SortedSetEntity("jedis", 5d));
//
//        IntStream.range(0, param.getLoopTimes()).forEach(i -> {
//            redissionUtil.zAdd(param.getKey(), trans2map(list));
//        });
//        return "SUCCESS";
//    }
//
//    private Map<String, Double> trans2map(List<SortedSetEntity> list) {
//        List<SortedSetEntity> entityList = list.stream().map(a -> {
//            String key = a.getKey();
//            a.setKey(key.concat(System.nanoTime() + ""));
//            return a;
//        }).collect(Collectors.toList());
//        return entityList.stream().collect(Collectors.toMap(SortedSetEntity::getKey, SortedSetEntity::getScore, (key1, key2) -> key2));
//    }
}
